package com.juzipi.framework.mybatisplus;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.juzipi.common.constant.mp.ConstantsMp;
import com.juzipi.common.utils.ServerUtils;
import com.juzipi.common.utils.StringUtils;
import com.juzipi.framework.web.service.TokenService;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class MybatisHandler implements MetaObjectHandler {

    @Autowired
    private TokenService tokenService;

    //添加时执行
    @Override
    public void insertFill(MetaObject metaObject) {

        /**
         * 基础实体类的通用字段
         */
        //创建时间
        this.setFieldValByName(ConstantsMp.CREATE_TIME,new Date(),metaObject);
        //更新时间
        this.setFieldValByName(ConstantsMp.UPDATE_TIME,new Date(),metaObject);
        //逻辑删除
        this.setFieldValByName(ConstantsMp.DELETED,ConstantsMp.DELETED_VALUE,metaObject);


        /**
         * user表的
         */
        //默认添加角色
        this.setFieldValByName(ConstantsMp.ROLE_ID,ConstantsMp.ROLE_ID_VALUE,metaObject);
        //默认随机昵称
        this.setFieldValByName(ConstantsMp.NICKNAME, ConstantsMp.NICKNAME_VALUE,metaObject);
        //默认未禁用
        this.setFieldValByName(ConstantsMp.NON_DISABLE,ConstantsMp.NON_DISABLE_VALUE,metaObject);
        //默认未锁定
        this.setFieldValByName(ConstantsMp.NON_LOCKED,ConstantsMp.NON_LOCKED_VALUE,metaObject);
        //创建者
//        this.setFieldValByName(ConstantsMp.CREATE_BY, getLoginUsername(),metaObject);
        //更新者
//        this.setFieldValByName(ConstantsMp.UPDATE_BY,getLoginUsername(),metaObject);
        //乐观锁版本号
        this.setFieldValByName(ConstantsMp.VERSION,ConstantsMp.VERSION_VALUE,metaObject);
    }

    //更新时执行
    @Override
    public void updateFill(MetaObject metaObject) {
        /**
         * 基础实体类的通用字段
         */
        this.setFieldValByName(ConstantsMp.UPDATE_TIME,new Date(),metaObject);
//        this.setFieldValByName(ConstantsMp.UPDATE_BY,getLoginUsername(),metaObject);

    }


//    private String getLoginUsername(){
//        return tokenService.getLoginUser(ServerUtils.getRequest()).getUsername();
//    }
}
